home *** CD-ROM | disk | FTP | other *** search
/ MacTech 1 to 12 / MacTech-vol-1-12.toast / Source / MacTech® Magazine / Volume 05 - 1989 / 05.08 Aug 89 / MacApp Intro Source / USample.inc1.p < prev    next >
Encoding:
Text File  |  1989-06-26  |  11.5 KB  |  448 lines  |  [TEXT/MPS ]

  1. CONST    {private}
  2.     kFileType                =    '????';    {File Type}
  3.     kSignature            =    'Samx';    {Creator name}
  4.     kSquareDots            =    TRUE;        {for ImageWriter printer}
  5.     kFixedSize            =    TRUE;
  6.     kWindRsrcID            =    1001;
  7.  
  8.     kPrinterStringID     =    1001;        {string resource ID}
  9.     kMacStringID            =    1002;        {string resource ID}
  10.     kFontStringId         = 1003;
  11.  
  12.     cMac                     =    2001;        {menu command number}
  13.     cPrinter             =    2002;        {menu command number}
  14.     
  15. VAR  {private}
  16.     hPos,vPos,Leading:Integer; {Used in Draw proc}
  17.     
  18. {============================================================================}
  19. {$S AInit}
  20. PROCEDURE TSampleApplication.ISampleApplication;
  21.     
  22. BEGIN
  23.     SELF.IApplication(kFileType);
  24. END;
  25.  
  26. {------------------------------------------------------------------------}
  27. {$S AOpen}
  28. FUNCTION  TSampleApplication.DoMakeDocument(
  29.                             itsCmdNumber: CmdNumber):TDocument; OVERRIDE;
  30.  
  31. VAR 
  32.     aSampleDocument:    TSampleDocument;
  33.  
  34. BEGIN
  35.     NEW(aSampleDocument);                    {create document object}
  36.     FailNil(aSampleDocument);                {make sure there was enough memory}
  37.     aSampleDocument.ISampleDocument;        {initialize the document object}
  38.     DoMakeDocument := aSampleDocument;        {function result is the document}
  39. END;
  40.  
  41. {============================================================================}
  42. {$S AOpen}
  43. PROCEDURE TSampleDocument.ISampleDocument;
  44.  
  45. BEGIN
  46.     SELF.IDocument(kFileType, kSignature, kUsesDataFork,
  47.             NOT kUsesRsrcFork, NOT kDataOpen, NOT kRsrcOpen);
  48.     SELF.fSavePrintInfo := TRUE;                {print record saved in disk file}
  49.     SELF.fDeviceCmd:= cMac;
  50. END;
  51.  
  52. {------------------------------------------------------------------------}
  53. {$S AOpen}
  54. PROCEDURE TSampleDocument.DoMakeViews(forPrinting: BOOLEAN); OVERRIDE;
  55.  
  56. VAR 
  57.     aSampleView:    TSampleView;
  58.     aStdHandler:    TStdPrintHandler;
  59.  
  60. BEGIN
  61.     NEW(aSampleView);                    {create a view object}
  62.     FailNil(aSampleView);                {make sure there is enough memory}
  63.     aSampleView.ISampleView(SELF);        {pass the document that created this view}
  64.     SELF.fSampleView := aSampleView;        {most documents keep a reference to their views}
  65.  
  66.     New(aStdHandler);                {create a print handler}
  67.     FailNIL(aStdHandler);            {make sure there is enough memory}
  68.     aStdHandler.IStdPrintHandler(SELF, aSampleView, NOT kSquareDots, 
  69.                 kFixedSize, kFixedSize);        {vertical, horizontal}
  70. END;
  71.  
  72. {------------------------------------------------------------------------}
  73. {$S AOpen}
  74. PROCEDURE TSampleDocument.DoMakeWindows; OVERRIDE;
  75.  
  76. VAR
  77.     aWindow:    TWindow;
  78.  
  79. BEGIN
  80.     aWindow := NewSimpleWindow(kWindRsrcID, kWantHScrollBar, kWantVScrollBar, 
  81.                                 SELF,             {document}
  82.                                 SELF.fSampleView);    {view}
  83.     aWindow.SimpleStagger(kStdStaggerAmount, kStdStaggerAmount, gStdStaggerCount);
  84. END;
  85.  
  86. {------------------------------------------------------------------------------}
  87. {$S ARes}
  88. PROCEDURE TSampleDocument.DoSetupMenus; OVERRIDE;
  89. VAR
  90.     SampleIndex:    Integer;
  91.     SampleCmd:        Integer;
  92. BEGIN
  93.     INHERITED DoSetupMenus;            {always do this, so other objects get chance}
  94.     Enable(cMac, TRUE);    
  95.     Enable(cPrinter, TRUE);            {enable this menu item}
  96.     SampleCmd:=SELF.GetCmd;
  97.     FOR SampleIndex:=cMac TO cPrinter DO
  98.         EnableCheck(SampleIndex, TRUE, (SampleIndex = SampleCmd));
  99. END;
  100.  
  101. {------------------------------------------------------------------------------}
  102. {$S ARes}
  103. FUNCTION  TSampleDocument.DoMenuCommand(aCmdNumber: CmdNumber):TCommand;OVERRIDE;
  104.     
  105. BEGIN
  106.     DoMenuCommand := gNoChanges;        {do this if commands not Undoable}
  107.     CASE aCmdNumber OF
  108.     
  109.         cMac:
  110.             BEGIN
  111.                 SELF.SetCmd(cMac);
  112.                 SELF.fSampleView.ForceRedraw;            {force update event for view}
  113.             END;
  114.             
  115.         cPrinter:
  116.             BEGIN
  117.                 SELF.SetCmd(cPrinter);
  118.                 SELF.fSampleView.ForceRedraw;            {force update event for view}
  119.             END;
  120.             
  121.         OTHERWISE            {always, so other objects get a chance}
  122.             DoMenuCommand := INHERITED DoMenuCommand(aCmdNumber);
  123.  
  124.         END;  {Case}
  125. END;
  126.  
  127. {------------------------------------------------------------------------}
  128. {$S ARes}
  129. PROCEDURE TSampleDocument.SetCmd(CmdID: INTEGER);
  130.     
  131. BEGIN
  132.     SELF.fDeviceCmd := CmdID;            {save string in document variable}
  133. END;
  134.  
  135. {------------------------------------------------------------------------}
  136. {$S ARes}
  137. FUNCTION TSampleDocument.GetCmd: Integer;
  138. BEGIN
  139.     GetCmd := SELF.fDeviceCmd;        {return internal vaiable as function result}
  140. END;
  141.  
  142. {============================================================================}
  143. {$S AOpen}
  144. PROCEDURE TSampleView.ISampleView(itsDocument: TSampleDocument);
  145.  
  146. VAR
  147.     itsSize: VPoint;
  148.  
  149. BEGIN
  150.     SetVPt(itsSize, 300, 300);        {width, height: 32-bit numbers}
  151.     SELF.IView(    itsDocument,         {document that created the view}
  152.                     NIL,                    {superview}
  153.                     gZeroVPt,             {topLeft; here = 0,0 as a VPoint}
  154.                     itsSize,             {width, height as a VPoint}
  155.                     sizeFixed,             {width}
  156.                     sizeFixed);            {height}
  157.     SELF.fSampleDocument := itsDocument;    {save address of document in view}
  158. END;
  159.  
  160. {------------------------------------------------------------------------}
  161. {$S ARes}
  162. PROCEDURE TSampleView.Draw(area: Rect); OVERRIDE;
  163.  
  164.         {---------------------------------------}
  165.         PROCEDURE MyDrawString(OutputStr:Str255);
  166.         Begin
  167.             DrawString(OutputStr);
  168.             vPos:=vPos+Leading;
  169.             MoveTo(hPos,vPos);
  170.  
  171.         End;
  172.         
  173.         {---------------------------------------}
  174.         
  175.         PROCEDURE DrawMac;
  176.         CONST
  177.             envMacIIcx        = 6;
  178.             envSE30             = 7;{ Not in the MPW 3.0 interfaces }
  179.  
  180.         VAR
  181.             MyConfigRecord: ConfigRecord; {from MAUtil.p}
  182.             Item: Integer;
  183.             bItem: Boolean;
  184.             Str:                 Str255;
  185.             aString: Str255;
  186.             aStringHdl:    StringHandle;
  187.         BEGIN
  188.             aStringHdl := GetString(kMacStringID);    {get string from resource file}
  189.             FailNILResource(aStringHdl);            {make sure there is no problem}
  190.             Str:=aStringHdl^^;
  191.             MyDrawString(Str);
  192.             
  193.             DefineConfiguration(MyConfigRecord); {from MAUtil.p}
  194.     
  195.             Item:= MyConfigRecord.environsVersion;
  196.             NumToString(Item, Str);
  197.             Str:= Concat( ' environsVersion = ', Str );
  198.             MyDrawString(Str);
  199.             
  200.             CASE MyConfigRecord.machineType OF
  201.                 envMac:
  202.                     aString := 'Mac';
  203.                 envXL:
  204.                     aString := 'XL';
  205.                 envMachUnknown:
  206.                     aString := 'MachUnknown';
  207.                 env512KE:
  208.                     aString := '512KE';
  209.                 envMacPlus:
  210.                     aString := 'MacPlus';
  211.                 envSE:
  212.                     aString := 'SE';
  213.                 envMacII:
  214.                     aString := 'MacII';
  215.                 envMacIIx:
  216.                     aString := 'MacIIx';
  217.                 envMacIIcx:
  218.                     aString := 'MacIIcx';
  219.                 envSE30:
  220.                     aString := 'SE30';
  221.                 OTHERWISE
  222.                     aString := 'MachUnknown';
  223.             END;
  224.             
  225.             Str:= Concat(' Machine Type = ' , aString);
  226.             MyDrawString(Str);
  227.             
  228.             Item:= MyConfigRecord.systemVersion;
  229.             NumToString(Item, Str);
  230.             Str:= Concat(' systemVersion = ' , Str);
  231.             MyDrawString(Str);
  232.             
  233.             CASE MyConfigRecord.processor OF
  234.                 envCPUUnknown:
  235.                     aString := 'CPUUnknown';
  236.                 env68000:
  237.                     aString := '68000';
  238.                 env68010:
  239.                     aString := '68010';
  240.                 env68020:
  241.                     aString := '68020';
  242.                 env68030:
  243.                     aString := '68030';
  244.                 OTHERWISE
  245.                     aString := 'CPUUnknown';
  246.             END;
  247.             
  248.             Str:= Concat(' CPU Version = ' , aString);
  249.             MyDrawString(Str);
  250.             
  251.             bItem:= MyConfigRecord.hasFPU;
  252.             IF bItem THEN Str:= ' has FPU = TRUE'
  253.                 ELSE Str:= ' has FPU = FALSE';
  254.             MyDrawString(Str);
  255.             
  256.             bItem:= MyConfigRecord.hasColorQD;
  257.             IF bItem THEN Str:= ' has Color QD = TRUE'
  258.                 ELSE Str:= ' has Color QD = FALSE';
  259.             MyDrawString(Str);
  260.             
  261.             CASE MyConfigRecord.keyboardType OF
  262.                 envUnknownKbd:
  263.                     aString := 'UnknownKbd';
  264.                 envMacKbd:
  265.                     aString := 'MacKbd';
  266.                 envMacAndPad:
  267.                     aString := 'MacAndPad';
  268.                 envMacPlusKbd:
  269.                     aString := 'MacPlusKbd';
  270.                 envAExtendKbd:
  271.                     aString := 'AExtendKbd';
  272.                 envStandADBKbd:
  273.                     aString := 'StandADBKbd';
  274.                 OTHERWISE
  275.                     aString := 'UnknownKbd';
  276.             END;
  277.             
  278.             Str:= Concat(' Keyboard Type = ' , aString);
  279.             MyDrawString(Str);
  280.             
  281.             Item:= MyConfigRecord.atDrvrVersNum;
  282.             NumToString(Item, Str);
  283.             Str:= Concat(' Driver Version = ' , Str);
  284.             MyDrawString(Str);
  285.             
  286.             Item:= MyConfigRecord.sysVRefNum;
  287.             NumToString(Item, Str);
  288.             Str:= Concat(' System Ref Number = ' , Str);
  289.             MyDrawString(Str);
  290.             
  291.             bItem:= MyConfigRecord.hasROM128K;
  292.             IF bItem THEN Str:= ' has 128K ROM = TRUE'
  293.                 ELSE Str:= ' has 128K ROM = FALSE';
  294.             MyDrawString(Str);
  295.             
  296.             bItem:= MyConfigRecord.hasHFS;
  297.             IF bItem THEN Str:= ' has HFS = TRUE'
  298.                 ELSE Str:= ' has HFS = FALSE';
  299.             MyDrawString(Str);
  300.             
  301.             bItem:= MyConfigRecord.hasHierarchicalMenus;
  302.             IF bItem THEN Str:= ' has Hierarchical Menus = TRUE'
  303.                 ELSE Str:= ' has Hierarchical Menus = FALSE';
  304.             MyDrawString(Str);
  305.             
  306.             bItem:= MyConfigRecord.hasScriptManager;
  307.             IF bItem THEN Str:= ' has Script Manager = TRUE'
  308.                 ELSE Str:= ' has Script Manager = FALSE';
  309.             MyDrawString(Str);
  310.             
  311.             bItem:= MyConfigRecord.hasStyleTextEdit;
  312.             IF bItem THEN Str:= ' has StyleText Edit = TRUE'
  313.                 ELSE Str:= ' has StyleTextEdit = FALSE';
  314.             MyDrawString(Str);
  315.             
  316.             bItem:= MyConfigRecord.hasSoundManager;
  317.             IF bItem THEN Str:= ' has Sound Manager = TRUE'
  318.                 ELSE Str:= ' has Sound Manager = FALSE';
  319.             MyDrawString(Str);
  320.             
  321.             bItem:= MyConfigRecord.hasWaitNextEvent;
  322.             IF bItem THEN Str:= ' has WaitNextEvent = TRUE'
  323.                 ELSE Str:= ' has WaitNextEvent = FALSE';
  324.             MyDrawString(Str);
  325.             
  326.             bItem:= MyConfigRecord.hasSCSI;
  327.             IF bItem THEN Str:= ' has SCSI = TRUE'
  328.                 ELSE Str:= ' has SCSI = FALSE';
  329.             MyDrawString(Str);
  330.             
  331.             bItem:= MyConfigRecord.hasDesktopBus;
  332.             IF bItem THEN Str:= ' has Desktop Bus = TRUE'
  333.                 ELSE Str:= ' has Desktop Bus = FALSE';
  334.             MyDrawString(Str);
  335.             
  336.         END;
  337.  
  338.         {---------------------------------------}
  339.  
  340.         PROCEDURE DrawPrinter;
  341.         TYPE
  342.             PrGeneralPtr = ^TGetRslBlk;
  343.         CONST
  344.             GetRslData = 4;
  345.         VAR
  346.             aStringHdl:    StringHandle;
  347.             Str:                 Str255;
  348.             Item:                LongInt;
  349.             pDialog:        PrGeneralPtr;
  350.             i,NumberOfRecords: Integer;
  351.         BEGIN
  352.             aStringHdl := GetString(kPrinterStringID);    {get string from resource file}
  353.             FailNILResource(aStringHdl);            {make sure there is no problem}
  354.             Str:=aStringHdl^^;
  355.             MyDrawString(Str);
  356.             pDialog:= PrGeneralPtr(NewPtr(SIZEOF(TGetRslBlk)));
  357.             PrOpen;
  358.             IF PrError = noErr then
  359.                 BEGIN
  360.                     pDialog^.iOpCode:= GetRslData;
  361.                     PrGeneral(Ptr(pDialog));
  362.                     IF PrError = noErr then
  363.                         BEGIN
  364.                             NumberOfRecords:= pDialog^.iRslRecCnt;
  365.                             FOR i:= 1 to NumberOfRecords DO
  366.                                 BEGIN
  367.                                     Item := pDialog^.rgRslRec[1].iXRsl;
  368.                                     NumToString(Item, Str);
  369.                                     Str:= Concat(' X Resolution = ' , Str);
  370.                                     MyDrawString(Str);
  371.                                     Item := pDialog^.rgRslRec[1].iYRsl;
  372.                                     NumToString(Item, Str);
  373.                                     Str:= Concat(' Y Resolution = ' , Str);
  374.                                     MyDrawString(Str);
  375.                                 END;
  376.                         END
  377.                     ELSE
  378.                         BEGIN
  379.                             Item:= LongInt(PrError);
  380.                             NumToString(Item, Str);
  381.                             Str:= Concat(' PrGeneral Error = ' , Str);
  382.                             MyDrawString(Str);
  383.                         END
  384.                 END
  385.             ELSE
  386.                 BEGIN
  387.                     Item:= LongInt(PrError);
  388.                     NumToString(Item, Str);
  389.                     Str:= Concat(' PrOpen Error = ' , Str);
  390.                     MyDrawString(Str);
  391.                 END;
  392.             PrClose;
  393.                 IF PrError = noErr then
  394.                 BEGIN    
  395.                 END
  396.             ELSE
  397.                 BEGIN
  398.                     Item:= LongInt(PrError);
  399.                     NumToString(Item, Str);
  400.                     Str:= Concat(' PrClose Error = ' , Str);
  401.                     MyDrawString(Str);
  402.                 END;        
  403.         END;
  404.         {-------------------------------------}
  405.  
  406. VAR
  407.     itsQDExtent:    Rect;
  408.     FontStr:            Str255;
  409.     FontNumber:        Integer;
  410.     aStringHdl:        StringHandle;
  411.     Mode:                    Integer;
  412.     
  413. BEGIN
  414.     PenNormal;                                {in case someone else changed it}
  415.     PenSize(1, 1);
  416.     PenPat(black);
  417.     
  418.     SELF.GetQDExtent(itsQDExtent);    {get size of this view}
  419.     InsetRect(itsQDExtent,2,2);
  420.     FrameRect(itsQDExtent);                {draw an enclosing rectangle}
  421.     
  422.     aStringHdl := GetString(kFontStringID);    {get string from resource file}
  423.     FailNILResource(aStringHdl);            {make sure there is no problem}
  424.     FontStr := aStringHdl^^;            {save string in variable}
  425.     GetFNum(FontStr,FontNumber);
  426.     
  427.     TextMode(srcOr);
  428.     TextFont(FontNumber);
  429.     TextFace([]);
  430.     hPos:=10;
  431.     vPos:=32;
  432.     MoveTo(hPos, vPos);
  433.     TextSize(12);
  434.     Leading:=14;
  435.     
  436.     Mode:=SELF.fSampleDocument.GetCmd;    
  437.     CASE Mode OF
  438.         cMac:
  439.                 DrawMac;    
  440.         cPrinter:
  441.                 DrawPrinter;
  442.         OTHERWISE;
  443.     END;
  444.     
  445.     PenNormal;
  446. END;
  447.  
  448.